package org.example.dynamic_planning;

import java.util.ArrayList;
import java.util.Arrays;

public class Integer_splitting {
    public static void main(String[] args) {
        //整数拆分

        //给定一个正整数 n ，将其拆分为 k 个 正整数 的和（ k >= 2 ），并使这些整数的乘积最大化。
        //返回 你可以获得的最大乘积 。
        int n = 10;
        int i = integerBreak(n);
        System.out.println(i);
    }
    public static int integerBreak(int n) {
        if (n==2 || n==3) return n-1;
        int[] dp = new int[n + 1];
        Arrays.fill(dp,0);
        dp[2] = 1;
        dp[3] = 2;
        for (int i = 4; i <= n; i++) {
            dp[i] = getMaxValue(dp,i);
        }
        return dp[n];
    }
    public static int getMaxValue(int[] dp,int n){
        int pre = 1;
        int last = n-pre;
        int max = Integer.MIN_VALUE;
        while(pre <= last){
            max = Math.max((pre < 4 ? pre : dp[pre])*(last < 4 ? last : dp[last]),max);
            pre++;
            last = n - pre;
        }
        return max;
    }
}
